package com.summer;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

public class ContentGenerator {
    public static void main(String[] args) {

        // 1. TODO 创建数据源配置对象，配置数据源信息
        DataSourceConfig dataSourceConfig = new DataSourceConfig();
        dataSourceConfig.setDriverName("com.mysql.cj.jdbc.Driver");
        dataSourceConfig.setUrl("jdbc:mysql://localhost:3306/xc_learning");
        dataSourceConfig.setUsername("root");
        dataSourceConfig.setPassword("1234");

        // 2. 创建全局配置对象，配置相关信息
        GlobalConfig globalConfig = new GlobalConfig();
        // TODO  输出位置：System.getProperty("user.dir")：当前项目路径
        globalConfig.setOutputDir(System.getProperty("user.dir") + "/code-generator/src/main/java");
        globalConfig.setOpen(false);              // 生成完毕之后是否打开生成代码所在目录， 默认true
        globalConfig.setAuthor("Mr.Chen");        // 作者
        globalConfig.setFileOverride(true);       // 再次生成是否覆盖之前生成的， 默认false
        //globalConfig.setMapperName("%sDao");      // 设置dao层接 口名字， %s指代模块名称，就是表名，默认%sMapper
        //globalConfig.setSwagger2(true);           // 开启swagger2
        // 设置id生成策略（注解方式），若表的主键设置为自增，则无论是否配置此属性，其实体类字段上id生成策略都为AUTO
        //globalConfig.setIdType(IdType.ASSIGN_ID);

        // 3. 创建包配置对象，配置相关信息
        PackageConfig packageConfig = new PackageConfig();
        packageConfig.setParent("com.summer.learning"); // TODO 默认com.baomidou 设置生成包名
        packageConfig.setEntity("pojo");       // 默认entity，设置实体类包名
        //packageConfig.setMapper("dao");        // 默认mapper  数据层包名

        // 4. 创建配置策略对象，设置相关策略
        StrategyConfig strategyConfig = new StrategyConfig();
        // TODO 设置参与生成的表名，参数为可变参数，若不配置则生成所有表
        /*strategyConfig.setInclude(
                "oauth_access_token",
                "oauth_approvals",
                "oauth_client_details",
                "oauth_client_details",
                "oauth_code",
                "oauth_refresh_token",
                "xc_company",
                "xc_company_user",
                "xc_menu",
                "xc_permission",
                "xc_role",
                "xc_teacher",
                "xc_user",
                "xc_user_role");*/


        //strategyConfig.setTablePrefix("course_");               // 设置前缀名，模块名(生成文件名)=表名-前缀名
        strategyConfig.setRestControllerStyle(true);             // 默认false, 是否启用rest风格
        //strategyConfig.setVersionFieldName("version");        // 设置乐观锁字段名，   根据字段名帮你加注解，但不配拦截器
        //strategyConfig.setLogicDeleteFieldName("deleted");   // 设置逻辑删除字段名， 根据字段名加注解，但不配拦截器
        strategyConfig.setEntityLombokModel(true);            // 默认false，是否启用lombok
       // TODO
        strategyConfig.setNaming(NamingStrategy.underline_to_camel);         // 表下划线命名变为实体类驼峰命名
        strategyConfig.setColumnNaming(NamingStrategy.underline_to_camel);   // 表字段下划线命名变为实体类字段驼峰命名


        // 5. 创建自动生成对象，set数据源、set全局配置、set包配置、set策略配置, execute() 执行
        AutoGenerator autoGenerator = new AutoGenerator();
        autoGenerator.setDataSource(dataSourceConfig);
        autoGenerator.setGlobalConfig(globalConfig);
        autoGenerator.setPackageInfo(packageConfig);
        autoGenerator.setStrategy(strategyConfig);
        autoGenerator.execute();
    }
}
